package com.tom.angel.dao;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

public interface BaseDaoI<T> {
	/**
	 * 保存信息
	 * @param t 
	 * @return
	 */
	public Serializable save(T t);
	
	/**
	 * 删除信息
	 * @param t 
	 * @return
	 */
	public void delete(T t);
	
	/**
	 * 更新信息
	 * @param t 
	 * @return
	 */
	public void update(T t);
	
	/**
	 * 保存或更新信息
	 * @param t 
	 * @return
	 */
	public void saveOrUpdate(T t);
	
	/**
	 * 根据hql语句查询一个对象
	 * @param hql 语句
	 * @return 具体对象
	 */
	public T get(String hql);
	
	/**
	 * 带参数的查询一个对象
	 * @param hql hql语句
	 * @param params 参数列表
	 * @return 具体对象
	 */
	public T get(String hql,Map<String,Object> params);
	
	/**
	 * 查询多个对象
	 * @param hql hql语句
	 * @return 具体对象
	 */
	public List<T> find(String hql);
	
	/**
	 * 带参数的查询多个对象
	 * @param hql hql语句
	 * @param params 参数列表
	 * @return 具体对象
	 */
	public List<T> find(String hql,Map<String,Object> params);
	
	/**
	 * 分页查询多个对象
	 * @param hql hql语句
	 * @param params 设置参数
	 * @param pageIndex 从多少条开始
	 * @param pageSize 多少条记录
	 * @return 多个对象
	 */
	public List<T> find(String hql,int pageIndex,int pageSize);
	
	
	/**
	 * 带参数分页查询多个对象
	 * @param hql hql语句
	 * @param params 设置参数
	 * @param pageIndex 从多少条开始
	 * @param pageSize 多少条记录
	 * @return 多个对象
	 */
	public List<T> find(String hql,Map<String,Object> params,int pageIndex,int pageSize);
	
	/**
	 * 查询总记录
	 * @param hql
	 * @return 总条数
	 */
	public Long count(String hql);
	
	/**
	 * 带参数查询总记录
	 * @param hql
	 * @return 总条数
	 */
	public Long count(String hql,Map<String,Object> params);
	
}
